home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / newlooklib.lha / newlook / createcyclebutton.c < prev    next >
C/C++ Source or Header  |  1993-10-24  |  4KB  |  136 lines

  1. /*
  2.  *  CREATECYCLEBUTTON.C
  3.  */
  4.  
  5. #include "newlook.h"
  6.  
  7. extern struct TextFont *OpenFont(struct TextAttr *);
  8. extern void CloseFont(struct TextFont *);
  9. extern LONG IntuiTextLength(struct IntuiText *);
  10.  
  11. static SHORT cycle_pairs[2*14]= {
  12.   12,8,
  13.   11,8,  /*......................*/
  14.   11,9,  /*.....*******......*+..*/
  15.    5,9,  /*....**.....**.....*+..*/
  16.    4,8,  /*....**.....**.....*+..*/
  17.    4,2,  /*....**...******...*+..*/
  18.    5,8,  /*....**....****....*+..*/
  19.    5,1,  /*....**.....**.....*+..*/
  20.   11,1,  /*....**............*+..*/
  21.   11,6,  /*....**.....**.....*+..*/
  22.    9,4,  /*.....*******......*+..*/
  23.   14,4,  /*......................*/
  24.   12,6,
  25.   12,2
  26. };
  27.  
  28. static SHORT csep_pairs[2][4]= { 18,1, 18,9,   /* black */
  29.                                  19,1, 19,9 }; /* white */
  30.  
  31. struct Gadget *CreateCycleButton(x,y,w, tlist, id)
  32. SHORT x,y,w;
  33. STRPTR *tlist;
  34. USHORT id;
  35. {
  36.   struct Gadget *g;
  37.   struct IntuiText *it;
  38.   struct CycleInfo *ci;
  39.   struct Border *b, *c, *s0, *s1;
  40.   const SHORT h= 13;
  41.  
  42.   ULONG UserHandle= SetNewLookHandle(PRIVATE_HANDLE);
  43.  
  44.   if(g= (struct Gadget *)SmartAllocate(GADGETSIZE))
  45.   {
  46.     if(b= CreateBorder(0,0,w,h,FALSE))
  47.     {
  48.       if(c= (struct Border *)SmartAllocate(BORDERSIZE))
  49.       {
  50.         if(s0= (struct Border *)SmartAllocate(BORDERSIZE))
  51.         {
  52.           if(s1= (struct Border *)SmartAllocate(BORDERSIZE))
  53.           {
  54.             if(ci= (struct CycleInfo *)SmartAllocate(CYCLEINFOSIZE))
  55.             {
  56.               if(it= CreateIText(0,0,NULL))
  57.               {
  58.                 struct TextFont *tf;
  59.                 it->IText= (UBYTE *)*tlist;
  60.  
  61.                 if(tf= (struct TextFont *)OpenFont(&Topaz80))
  62.                 { it->TopEdge= (h-tf->tf_Baseline)/2;
  63.                   CloseFont(tf);
  64.                 }
  65.                 else it->TopEdge= (h-6)/2; /* `known' topaz80 dimensions */
  66.  
  67.                 it->LeftEdge= (w+21-IntuiTextLength(it))/2;
  68.  
  69.                 /* cycle arrow */
  70.                 c->LeftEdge     = 2;
  71.                 c->TopEdge      = 1;
  72.                 c->FrontPen     = 1;
  73.                 c->BackPen      = 0;
  74.                 c->DrawMode     = JAM1;
  75.                 c->Count        = 14;
  76.                 c->XY           = cycle_pairs;
  77.                 c->NextBorder   = s0;
  78.  
  79.                 /* black seperator */
  80.                 s0->LeftEdge     = 2;
  81.                 s0->TopEdge      = 1;
  82.                 s0->FrontPen     = 1;
  83.                 s0->BackPen      = 0;
  84.                 s0->DrawMode     = JAM1;
  85.                 s0->Count        = 2;
  86.                 s0->XY           = csep_pairs[0];
  87.                 s0->NextBorder   = s1;
  88.  
  89.                 /* white seperator */
  90.                 s1->LeftEdge     = 2;
  91.                 s1->TopEdge      = 1;
  92.                 s1->FrontPen     = 2;
  93.                 s1->BackPen      = 0;
  94.                 s1->DrawMode     = JAM1;
  95.                 s1->Count        = 2;
  96.                 s1->XY           = csep_pairs[1];
  97.                 s1->NextBorder   = b;
  98.  
  99.                 /* struct CycleInfo */
  100.                 ci->ci_UserData  = (APTR)NULL;
  101.                 ci->ci_IntuiText = it;
  102.                 ci->ci_Items     = tlist;
  103.                 ci->ci_CurrentIndex = 0;
  104.  
  105.                 g->NextGadget    = (struct Gadget *)NULL;
  106.                 g->LeftEdge      = x;
  107.                 g->TopEdge       = y;
  108.                 g->Width         = w;
  109.                 g->Height        = h;
  110.                 g->Flags         = GADGHCOMP;
  111.                 g->Activation    = GADGIMMEDIATE|RELVERIFY;
  112.                 g->GadgetType    = BOOLGADGET;
  113.                 g->GadgetRender  = (APTR)c;
  114.                 g->SelectRender  = (APTR)NULL;
  115.                 g->GadgetText    = it;
  116.                 g->MutualExclude = (LONG)0L;
  117.                 g->SpecialInfo   = (APTR)NULL;
  118.                 g->GadgetID      = id;
  119.                 g->UserData      = (APTR)ci;
  120.  
  121.                 MakePrivateHandlePublic(UserHandle);
  122.                 return g;
  123.               }
  124.             }
  125.           }
  126.         }
  127.       }
  128.     }
  129.   }
  130.   if(UserHandle != PRIVATE_HANDLE)
  131.   { SmartFreeAll(PRIVATE_HANDLE);
  132.     (void)SetNewLookHandle(UserHandle);
  133.   }
  134.   return (struct Gadget *)NULL;
  135. }
  136.